-- 检查库存分桶数据key是否存在，如果不存在则说明还没初始化库存，返回 -1
if (redis.call('exists', KEYS[1]) == 0) then
    return -1;
end
-- 判断是否正在执行库存编排，如果有锁存在，则拒绝操作，返回 -2
if (redis.call('exists', KEYS[2]) == 1) then
    return -2;
end
-- 检查库存校对key是否存在
if (redis.call('exists', KEYS[3]) == 1) then
    return -3;
end
-- 再次确认库存分桶数据key是否存在（防止中间状态变化）
if (redis.call('exists', KEYS[1]) == 1) then
    -- 将库存分桶数据转为数字类型
    local stocksAmount = tonumber(redis.call('get', KEYS[1]));
    -- 获取请求扣减的库存数量参数
    local quantity = tonumber(ARGV[1]);
    -- 库存不足
    if (stocksAmount < quantity) then
        return -4;
    end
    -- 库存足够
    if (stocksAmount >= quantity) then
        -- 使用负数实现减库存操作，保证原子性
        redis.call('incrby', KEYS[1], 0 - quantity);
        -- 返回操作成功标识
        return 1;
    end
end
return -10;
